package com.jdy.haoduoaiteacher.view;//package com.jdy.haoduoaiteacher.view;
//
//import android.content.Context;
//import android.util.AttributeSet;
//import android.view.MotionEvent;
//import android.view.View;
//import android.view.ViewTreeObserver.OnGlobalLayoutListener;
//import android.view.animation.DecelerateInterpolator;
//import android.view.animation.LinearInterpolator;
//import android.widget.ImageView;
//import android.widget.ScrollView;
//
//import com.jdy.haoduoaiteacher.R;
//import com.nineoldandroids.animation.Animator;
//import com.nineoldandroids.animation.Animator.AnimatorListener;
//import com.nineoldandroids.animation.AnimatorSet;
//import com.nineoldandroids.animation.ObjectAnimator;
//import com.nineoldandroids.animation.ValueAnimator;
//import com.nineoldandroids.animation.ValueAnimator.AnimatorUpdateListener;
//import com.nineoldandroids.view.ViewHelper;
//
//public class PullLayout extends ScrollView {
//
//  private View rl_top;
//  // private View ll_weather;
//  private View ll_content;
//  // private TextView tv;
//  private EyeView ev;
//  private ObjectAnimator oa;
//  private float lastY = -1;
//  private float detalY = -1;
//  private int range;
//  private int tvHeight;
//  private int tvWidth;
//  private boolean isTouchOrRunning;
//  private boolean isActionCancel;
//
//  private OnAnimEndListener mOnAnimEndListener;
//
//  public OnAnimEndListener getOnAnimEndListener() {
//    return mOnAnimEndListener;
//  }
//
//  private ImageView imgsun;
//
//  private ImageView sun_bg;
//
//  public ImageView getImgsun() {
//    return imgsun;
//  }
//
//  public void setImgsun(ImageView imgsun) {
//    this.imgsun = imgsun;
//  }
//
//  public void setOnAnimEndListener(OnAnimEndListener mOnAnimEndListener) {
//    this.mOnAnimEndListener = mOnAnimEndListener;
//  }
//
//  public interface OnAnimEndListener {
//    public void onCloseAnimEnd();
//
//    public void onOpenAnimEnd();
//  };
//
//  public PullLayout(Context context) {
//    super(context);
//
//    ctx = context;
//  }
//
//  public PullLayout(Context context, AttributeSet attrs) {
//    super(context, attrs);
//    ctx = context;
//  }
//
//  public PullLayout(Context context, AttributeSet attrs, int defStyle) {
//    super(context, attrs, defStyle);
//    ctx = context;
//  }
//
//  Context ctx;
//
//  @Override
//  protected void onFinishInflate() {
//    super.onFinishInflate();
//
//    if (isInEditMode()) {
//      return;
//    }
//
//    setVerticalScrollBarEnabled(false);
//    rl_top = findViewById(R.id.testlayout);
//    ll_content = findViewById(R.id.testlayout);
//    // tv = (TextView) findViewById(R.id.sun_txt);
//    ev = (EyeView) findViewById(R.id.ev);
//
//    sun_bg = (ImageView) findViewById(R.id.sun_bg);
//    // ll_weather = findViewById(R.id.ll_weather);
//
//    if (isInEditMode()) {
//      return;
//    }
//    rl_top.getViewTreeObserver().addOnGlobalLayoutListener(
//        new OnGlobalLayoutListener() {
//          @SuppressWarnings("deprecation")
//          @Override
//          public void onGlobalLayout() {
//            rl_top.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//            range = rl_top.getHeight();
//            scrollTo(0, range);
//            rl_top.getLayoutParams().height = range;
//          }
//        });
//    // tv.getViewTreeObserver().addOnGlobalLayoutListener(
//    // new OnGlobalLayoutListener() {
//    // @SuppressWarnings("deprecation")
//    // @Override
//    // public void onGlobalLayout() {
//    // tv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//    // tvHeight = tv.getHeight();
//    // tvWidth = tv.getWidth();
//    // ViewHelper.setTranslationY(ll_content, tvHeight);
//    // }
//    // });
//
//    ev.setOnClickListener(new OnClickListener() {
//      @Override
//      public void onClick(View v) {
//        close();
//      }
//    });
//
//    // tv.setOnClickListener(new OnClickListener() {
//    // @Override
//    // public void onClick(View v) {
//    // open();
//    // }
//    // });
//
//    if (sun_bg != null) {
//
//      mAniAvatar = ObjectAnimator.ofFloat(sun_bg, "rotation", 0f, 360f);
//      mAniAvatar.addUpdateListener(new AnimatorUpdateListener() {
//        @Override
//        public void onAnimationUpdate(ValueAnimator animation) {
//          mValueAvatar = (Float) animation.getAnimatedValue("rotation");
//        }
//      });
//
//      mAniAvatar.setDuration(ROTATE_TIME);
//      mAniAvatar.setInterpolator(new LinearInterpolator());
//      mAniAvatar.setRepeatCount(ROTATE_COUNT);
//
//      AnimatorSet animSet = new AnimatorSet();
//      animSet.play(mAniAvatar);
//      animSet.start();
//    }
//
//    if (imgsun != null) {
//
//      mAniAvatar = ObjectAnimator.ofFloat(imgsun, "rotation", 0f, 360f);
//
//      mAniAvatar.addUpdateListener(new AnimatorUpdateListener() {
//        @Override
//        public void onAnimationUpdate(ValueAnimator animation) {
//          mValueAvatar = (Float) animation.getAnimatedValue("rotation");
//        }
//      });
//
//      mAniAvatar.setDuration(ROTATE_TIME);
//      mAniAvatar.setInterpolator(new LinearInterpolator());
//      mAniAvatar.setRepeatCount(ROTATE_COUNT);
//
//      AnimatorSet animSet = new AnimatorSet();
//      animSet.play(mAniAvatar);
//      animSet.start();
//
//      // RotateAnimation refreshingAnimation = (RotateAnimation) AnimationUtils
//      // .loadAnimation(ctx, R.anim.rotating);
//      //
//      // imgsun.setAnimation(refreshingAnimation);
//      // refreshingAnimation.startNow();
//
//      imgsun.setOnClickListener(new OnClickListener() {
//
//        @Override
//        public void onClick(View v) {
//          open();
//
//        }
//      });
//    }
//
//  }
//
//  private ObjectAnimator mAniAvatar;
//  float mValueAvatar;
//  // 旋转一周所用时间
//  private static final int ROTATE_TIME = 4 * 1000;
//  // 动画旋转重复执行的次数，这里代表无数次，似乎没有无限执行的属性，所以用了一个大数字代表
//  private static final int ROTATE_COUNT = 10000;
//
//  @Override
//  public boolean onInterceptTouchEvent(MotionEvent ev) {
//    switch (ev.getAction()) {
//    case MotionEvent.ACTION_DOWN:
//      isActionCancel = false;
//      isTouchOrRunning = true;
//      lastY = ev.getY();
//      break;
//    }
//    return super.onInterceptTouchEvent(ev);
//  }
//
//  @Override
//  public boolean onTouchEvent(MotionEvent ev) {
//    if (oa != null && oa.isRunning()) {
//      ev.setAction(MotionEvent.ACTION_UP);
//      isActionCancel = true;
//    }
//    if (isActionCancel && ev.getAction() != MotionEvent.ACTION_DOWN) {
//      return false;
//    }
//    if (ev.getActionIndex() != 0 && getScrollY() < range) {
//      ev.setAction(MotionEvent.ACTION_UP);
//      isActionCancel = true;
//    }
//
//    switch (ev.getAction()) {
//    case MotionEvent.ACTION_MOVE:
//      isTouchOrRunning = true;
//      if (getScrollY() != 0) {
//        detalY = 0;
//        lastY = ev.getY();
//      } else {
//        detalY = ev.getY() - lastY;
//        if (detalY > 0) {
//          setT((int) -detalY / 5);
//          return true;
//        }
//      }
//      break;
//    case MotionEvent.ACTION_UP:
//      isTouchOrRunning = false;
//      if (getScrollY() < range) {
//        if (detalY != 0) {
//          reset();
//        } else {
//          toggle();
//        }
//        return true;
//      }
//      break;
//    }
//    return super.onTouchEvent(ev);
//  }
//
//  @Override
//  protected void onScrollChanged(int l, int t, int oldl, int oldt) {
//    super.onScrollChanged(l, t, oldl, oldt);
//    if (t >= range) {
//      return;
//    } else if (!isTouchOrRunning && t != range) {
//      scrollTo(0, range);
//    } else {
//      animateScroll(t);
//    }
//  }
//
//  public void setT(int t) {
//    scrollTo(0, t);
//    if (t < 0) {
//      animatePull(t);
//    }
//  }
//
//  private void animateScroll(int t) {
//    float percent = (float) t / range;
//    ViewHelper.setTranslationY(rl_top, t);
//    ViewHelper.setTranslationY(ll_content, tvHeight * percent);
//    ViewHelper.setScaleX(ev, 1 - percent);
//    ViewHelper.setScaleY(ev, 1 - percent);
//    // ViewHelper.setTranslationX(tv, tvWidth * (1 - percent) / 2f);
//    // ViewHelper.setTranslationY(tv, t + tvHeight * (1 - percent) / 2f);
//    ViewHelper.setTranslationY(ev, -t / 2);
//    // ViewHelper.setTranslationY(ll_weather, -t / 2);
//    ev.setRadius((int) (range * 0.25f * (1 - percent)));
//    // tv.setTextColor(evaluate(percent, Color.WHITE, Color.BLACK));
//  }
//
//  private void animatePull(int t) {
//    rl_top.getLayoutParams().height = range - t;
//    rl_top.requestLayout();
//    float percent = (float) t / range;
//    ViewHelper.setScaleX(ev, 1 - percent);
//    ViewHelper.setScaleY(ev, 1 - percent);
//    // ViewHelper.setScaleX(tv, 2 - percent);
//    // ViewHelper.setScaleY(tv, 2 - percent);
//    // ViewHelper.setTranslationX(tv, tvWidth * (1 - percent) / 2f);
//    // ViewHelper.setTranslationY(ll_weather, t / 2);
//  }
//
//  private Integer evaluate(float fraction, Object startValue, Integer endValue) {
//    int startInt = (Integer) startValue;
//    int startA = (startInt >> 24) & 0xff;
//    int startR = (startInt >> 16) & 0xff;
//    int startG = (startInt >> 8) & 0xff;
//    int startB = startInt & 0xff;
//    int endInt = endValue;
//    int endA = (endInt >> 24) & 0xff;
//    int endR = (endInt >> 16) & 0xff;
//    int endG = (endInt >> 8) & 0xff;
//    int endB = endInt & 0xff;
//    return (startA + (int) (fraction * (endA - startA))) << 24
//        | (startR + (int) (fraction * (endR - startR))) << 16
//        | (startG + (int) (fraction * (endG - startG))) << 8
//        | ((startB + (int) (fraction * (endB - startB))));
//  }
//
//  public void toggle() {
//    if (isOpen()) {
//      close();
//    } else {
//      open();
//    }
//  }
//
//  private Status status;
//
//  public enum Status {
//    Open, Close;
//  }
//
//  public boolean isOpen() {
//    return status == Status.Open;
//  }
//
//  private void reset() {
//    if (oa != null && oa.isRunning()) {
//      return;
//    }
//    oa = ObjectAnimator.ofInt(this, "t", (int) -detalY / 5, 0);
//    oa.setDuration(150);
//    oa.start();
//  }
//
//  public void close() {
//    if (oa != null && oa.isRunning()) {
//      return;
//    }
//    oa = ObjectAnimator.ofInt(this, "t", getScrollY(), range);
//    oa.setInterpolator(new DecelerateInterpolator());
//    oa.addListener(new AnimatorListener() {
//      @Override
//      public void onAnimationStart(Animator arg0) {
//        isTouchOrRunning = true;
//      }
//
//      @Override
//      public void onAnimationRepeat(Animator arg0) {
//      }
//
//      @Override
//      public void onAnimationEnd(Animator arg0) {
//        isTouchOrRunning = false;
//        status = Status.Close;
//
//        if (mOnAnimEndListener != null) {
//          mOnAnimEndListener.onCloseAnimEnd();
//        }
//      }
//
//      @Override
//      public void onAnimationCancel(Animator arg0) {
//
//      }
//    });
//    oa.setDuration(250);
//    oa.start();
//  }
//
//  public void open() {
//    if (oa != null && oa.isRunning()) {
//      return;
//    }
//    oa = ObjectAnimator.ofInt(this, "t", getScrollY(),
//        (int) (-getScrollY() / 2.2f), 0);
//    oa.setInterpolator(new DecelerateInterpolator());
//    oa.addListener(new AnimatorListener() {
//      @Override
//      public void onAnimationStart(Animator arg0) {
//        isTouchOrRunning = true;
//      }
//
//      @Override
//      public void onAnimationRepeat(Animator arg0) {
//      }
//
//      @Override
//      public void onAnimationEnd(Animator arg0) {
//        isTouchOrRunning = false;
//        status = Status.Open;
//
//        if (mOnAnimEndListener != null) {
//          mOnAnimEndListener.onOpenAnimEnd();
//        }
//      }
//
//      @Override
//      public void onAnimationCancel(Animator arg0) {
//
//      }
//    });
//    oa.setDuration(400);
//    oa.start();
//  }
//
// }
